<?php
class ReporteController extends GxController {
    
    public function filters() {
	return array(
			'accessControl', 
			);
    }

    public function accessRules() {
            return array(

                           array('allow',
                                    'actions'=>array('view'),
                                    'users'=>array('admin'),
                                    ),
                          array('deny',
                                    'users'=>array('*'),
                                    ),
                            );
    }
    
    public function actionView() {
        Controller::registrar_scrips();
        $resp= '';
        if (isset($_POST['Encuestas'])) {
                $idencuesta=$_POST['Encuestas']['ENCID'];
                if (isset($_POST['yt1'])){
                    if ($this->existe_reporte($idencuesta))
                        $this->Exportar($idencuesta);
                    else
                        $resp = 'No existe reporte generado';
                }
                if (isset($_POST['yt0'])){
                     $this->Generar($idencuesta);
                     if ($this->existe_reporte($idencuesta))
                        $this->Exportar($idencuesta);
                     else
                        $resp = 'No existe reporte generado';
                }
        }
        //var_dump($_POST);
        $this->render('view', array('resp'=>$resp));
    }
    
    protected function Generar($idencuesta)
    {
        Yii::app()->db->createCommand('BEGIN GENERAR_REPORTE('.$idencuesta.'); END;')->execute();
    }
    
    protected function Exportar($idencuesta) {
            $connection = Yii::app()->db;
            $data = $connection->createCommand('SELECT * FROM REPORTE'.$idencuesta)->queryAll();
            //OBTIENE HEADER
            if ($data[0] != null){
                $valor = array_keys($data[0]);
                $inqry = '';
                for ($f = 0; $f < count($valor); $f++){
                    if (is_numeric($valor[$f]))
                    $inqry .= $valor[$f].',';
                }
                $inqry = substr($inqry, 0, strlen($inqry) -1);
                $alias1 = $connection->createCommand('SELECT DISTINCT ALSID, ALSNOMBRE FROM ALIAS WHERE ALSID IN ('.$inqry.')')->queryAll();
                $aliasNames = array();
                foreach($alias1 as $record){
                    $tmp = array_values($record);
                    $aliasNames[$tmp[0]]=$tmp[1];
                }
            }
            //FIN OBTIENE HEADER
            $data2 = $connection->createCommand('SELECT * FROM REPORTEMULT'.$idencuesta)->queryAll();
            //OBTIENE HEADER
            unset($valor);
            if ($data2[0] != null){
                $valor = array_keys($data2[0]);
                $inqry = '';
                for ($f = 0; $f < count($valor); $f++){
                    if (is_numeric($valor[$f]))
                    $inqry .= $valor[$f].',';
                }
                $inqry = substr($inqry, 0, strlen($inqry) -1);
                $alias2 = $connection->createCommand('SELECT DISTINCT ALSID, ALSNOMBRE FROM ALIAS WHERE ALSID IN ('.$inqry.')')->queryAll();
                $aliasNames2 = array();
                foreach($alias2 as $record){
                    $tmp = array_values($record);
                    $aliasNames2[$tmp[0]]=$tmp[1];
                }
            }
            //FIN OBTIENE HEADER
            $data3 = $connection->createCommand('SELECT * FROM REPORTEESPE'.$idencuesta)->queryAll();
            //OBTIENE HEADER
            unset($valor);
            if ($data3[0] != null){
                $valor = array_keys($data3[0]);
                $inqry = '';
                for ($f = 0; $f < count($valor); $f++){
                    if (is_numeric($valor[$f]))
                    $inqry .= $valor[$f].',';
                }
                $inqry = substr($inqry, 0, strlen($inqry) -1);
                $alias3 = $connection->createCommand('SELECT DISTINCT ALSID, ALSNOMBRE FROM ALIAS WHERE ALSID IN ('.$inqry.')')->queryAll();
                $aliasNames3 = array();
                foreach($alias3 as $record){
                    $tmp = array_values($record);
                    $aliasNames3[$tmp[0]]=$tmp[1];
                }
            }
            //FIN OBTIENE HEADER
            
            $phpExcelPath = Yii::getPathOfAlias('ext.phpexcel.Classes');
            spl_autoload_unregister(array('YiiBase','autoload'));        
            include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
            include ($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel/Writer/Excel2007.php');
            
            $objPHPExcel = new PHPExcel();

            // Set properties
            $objPHPExcel->getProperties()->setCreator("MG GROUP")
            ->setLastModifiedBy("MG GROUP")
            ->setTitle("Reporte Egresados")
            ->setSubject("Reporte Egresados Encuesta $idencuesta")
            ->setDescription("Reporte Egresados Encuesta $idencuesta")
            ->setKeywords("xlsx php")
            ->setCategory("Reporte");

            //*****************************************************NUCLEO BASICO*********************************
            //DATOS
            $i = 2;
            $cuentatemp = 0;
            $objPHPExcel->getActiveSheet()->setCellValue('A1',strip_tags('Encuesta'),true);
            $objPHPExcel->getActiveSheet()->setCellValue('B1',strip_tags('Número de registro único'),true);
            $objPHPExcel->getActiveSheet()->setCellValue('C1',strip_tags('Usuario'),true);
            foreach($data as $record){ 
                $valor = array_values($record);
                $valor2 = array_keys($record);
                $cuenta = count($valor);
                $cuentatemp = $cuenta;
                for ($f = 0; $f < $cuenta; $f++){
                    if ($i==2){
                        if ($f>2)
                            $objPHPExcel->getActiveSheet()->setCellValue( $this->columnName($f+1).($i-1),strip_tags($aliasNames[$valor2[$f]]),true);
                    }
                    $objPHPExcel->getActiveSheet()->setCellValue( $this->columnName($f+1).$i,strip_tags($valor[$f]),true);
                }
                $i++;
            }

            // Rename sheet
            $objPHPExcel->getActiveSheet()->setTitle('Nucleo basico');
            //**************************************************** FIN NUCLEO BASICO *************************************
            //**************************************************** MULTIPLES **********************************
            $objPHPExcel->createSheet(1);
            $objPHPExcel->setActiveSheetIndex(1);
            
            $i = 2;
            $cuentatemp = 0;
            $objPHPExcel->getActiveSheet()->setCellValue('A1',strip_tags('Encuesta'),true);
            $objPHPExcel->getActiveSheet()->setCellValue('B1',strip_tags('Número de registro único'),true);
            $objPHPExcel->getActiveSheet()->setCellValue('C1',strip_tags('Usuario'),true);
            foreach($data2 as $record){
                $valor = array_values($record);
                $valor2 = array_keys($record);
                $cuenta = count($valor);
                $cuentatemp = $cuenta;
                for ($f = 0; $f < $cuenta; $f++){
                    if ($i==2){
                        if ($f>2)
                            $objPHPExcel->getActiveSheet()->setCellValue( $this->columnName($f+1).($i-1),strip_tags($aliasNames2[$valor2[$f]]),true);
                    }
                    $objPHPExcel->getActiveSheet()->setCellValue( $this->columnName($f+1).$i,strip_tags($valor[$f]),true);
                }
                $i++;
            }
            
            $objPHPExcel->getActiveSheet()->setTitle('Respuestas Multiples');
            //**************************************************** FIN MULTIPLES **********************************
            //**************************************************** MULTIPLES **********************************
            $objPHPExcel->createSheet(2);
            $objPHPExcel->setActiveSheetIndex(2);
            
            $i = 2;
            $cuentatemp = 0;
            $objPHPExcel->getActiveSheet()->setCellValue('A1',strip_tags('Encuesta'),true);
            $objPHPExcel->getActiveSheet()->setCellValue('B1',strip_tags('Número de registro único'),true);
            $objPHPExcel->getActiveSheet()->setCellValue('C1',strip_tags('Usuario'),true);
            foreach($data3 as $record){
                $valor = array_values($record);
                $valor2 = array_keys($record);
                $cuenta = count($valor);
                $cuentatemp = $cuenta;
                for ($f = 0; $f < $cuenta; $f++){
                    if ($i==2){
                        if ($f>2)
                            $objPHPExcel->getActiveSheet()->setCellValue( $this->columnName($f+1).($i-1),strip_tags($aliasNames3[$valor2[$f]]),true);
                    }
                    $objPHPExcel->getActiveSheet()->setCellValue( $this->columnName($f+1).$i,strip_tags($valor[$f]),true);
                }
                $i++;
            }
            
            $objPHPExcel->getActiveSheet()->setTitle('Nucleos Especificos');
            //**************************************************** FIN MULTIPLES **********************************
            $objPHPExcel->setActiveSheetIndex(0);
            ob_end_clean();
            // Redirect output to a client’s web browser (Excel2007)
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="Reporte'.$idencuesta.'.xlsx"');
            header('Cache-Control: max-age=0');
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
            $objWriter->save('php://output');
            Yii::app()->end();
            spl_autoload_register(array('YiiBase','autoload'));
    }

    public function columnName($index){
            --$index;
            if($index >= 0 && $index < 26)
                    return chr(ord('A') + $index);
            else if ($index > 25)
                    return ($this->columnName($index / 26)).($this->columnName($index%26 + 1));
                    else
                            throw new Exception("Invalid Column # ".($index + 1));
    }
    
    protected  function existe_reporte($idencuesta){
            if (Yii::app()->db->createCommand("select COUNT(*) from user_tables where table_name IN ('REPORTE$idencuesta','REPORTEESPE$idencuesta','REPORTEMULT$idencuesta')")->queryScalar()==3)
                return true;
            else
                return false;
    }

}